package com.reflection.jdkreflect;

import java.lang.reflect.Proxy;


public class Test {
	public static void main(String[] args) {
//		MyInterface myInterface = new MyClass();
//		MyInterface myInterface2 = myInterface;
//		MyInterface myInterface1 = (MyInterface)Proxy.newProxyInstance(myInterface.getClass().getClassLoader(),MyClass.class.getInterfaces(),new InvocationHandler() {
//			@Override
//			public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
//				Object result = method.invoke(myInterface2, args);
//				if(result != null){
//					String resultValue = result.toString();
//					if(resultValue.contains("猪")){
//						return "对不起，不能包含猪";
//					}
//				}
//				return result;
//			}
//		}); 
//		System.out.println(myInterface1.getUserName());
		/**
		 * 第一个参数是类加载器，任意类加载器都行，通常用目标类的类加载器即可；
		 * 第二个参数是目标类实现的接口，跟静态代理差不多，这里是为了让代理类和目标类的方法名一样；
		 * 第三个参数是一个InvocationHandler类型的参数
		 */
		MyInterface myInterface = null;
		myInterface = (MyInterface)Proxy.newProxyInstance(MyInterface.class.getClassLoader(),new Class<?>[]{MyInterface.class},new MyInvocationHandler(null)); 
		System.out.println(myInterface.getUserId());
	}
}
